# coding=utf-8

SCRIPT_BASE_PATH = "/etc/dsms/scripts"


class ServiceLifecycle(object):
    """
    服务的生命周期管理
    第一次运行时，从数据库中读取脚本信息。之后不再读取。
    用户在页面上修改脚本内容后，通过刷新动作重新形成脚本文件。
    """

    def __init__(self, serviceinfo, command_executor):
        """
        在初始化过程中，首先要根据服务的脚本来源来形成最终的脚本
        如果是本地脚本，那么直接使用；如果脚本内容保存在数据库中，
        那么则从数据库中读取数据内容，然后形成运行的脚本文件。
        """
        self.service = serviceinfo
        self.executor = command_executor

        if self.service.script_from == "db":
            # 脚本来自数据库
            db = DBFactory.getDB()
            script_content = db.query_script(self.service.id)

            # 新建一个服务脚本，采用服务名称加上一个时间作为文件名 (服务名称唯一，并且只能为英文字母)
            script_filename = self.service.name + dateutil.getcurrtime() + ".sh"
            script_file_path = SCRIPT_BASE_PATH + "/" + script_filename
            fileutil.create_file(script_file_path, script_content)
            self.service.script = script_file_path

    def start(self):
        """
        启动一个服务, 调用本地的启动脚本
        :return:
        """
        self.executor.run(self.service.script, "start")

    def stop(self):
        """
        停止一个服务
        :return:
        """
        self.executor.run(self.service.script, "stop")

    def status(self):
        """
        获取一个服务当前的状态
        :return: True 为正在运行，否则为没有运行
        """
        errorcode, output = self.executor.run(self.service.script, "status")
        if errorcode == 0:
            return True
        return False
